Kanteu, у тебя в описаниях стоит код AUdc, тебе нужно его заменить на равкод твоей способности. Чтобы его узнать, выдели способность и нажми Ctrl+D. Перед двоеточием будет равкод способности.
Это конкретно по ошибке... а вообще - не надо смотреть видео от этого человека, он тебя плохому научит... правда. А другим потом придётся тебя переучивать, если ты сам это дело не забросишь
Ах, я понял чего ты хочешь конкретно сейчас. Чтобы модель смотрела в камеру, словно на экране выбора персонажа? В таком случае ситуация немного упрощается.
Нам больше не нужно хранить текущую матрицу поворота эффекта, ведь мы не производим ее вращение, вместо этого мы высчитывает всю необходимую ориентацию из положения камеры и самого эффекта. Подход, в целом, остается прежним, но для поиска осей ориентации мы теперь будем использовать некоторый вспомогательный вектор, чье направление совпадает с направлением глобальной оси Z, и путем векторного произведения этого вспомогательного вектора на вектор оси X эффекта (получаемый как и прежде p2 - p1) мы получаем вектор ориентации эффекта Y, а векторное произведение X на Y нам даст ось Z эффекта.
Весь процесс можно разжевать на множество абзацев, но делать этого нет смысла. Я проще скину твою карту с новым вариантом.
Тем не менее, я вижу некоторое непонимание темы и потому считаю должным указать на некоторые ошибки в твоем прошлом коде
Код
private function RotationMatrixToEuler takes MATRIX3 R returns VECTOR3
local real x
local real y
local real z
local real sy = SquareRoot(R.m11 * R.m11 + R.m21 * R.m21)
local boolean singular = sy < .000001 or sy == 0 // If
if not singular then
set x = Atan2(R.m32 , R.m33)
set y = Atan2(-R.m31, sy)
set z = Atan2(R.m21, R.m11)
else
set x = Atan2(-R.m23, R.m22)
set y = Atan2(-R.m31, sy)
set z = 0
endif
return VECTOR3.New_1(x, y, z)
endfunction
Я не понимаю, как работает эта функция. В моем понимании, преобразование матрицы поворота в углы Эйлера происходит за счет обратного преобразования. То есть, чтобы преобразовать матрицу в Эйлер, необходимо знать как преобразуется Эйлер в матрицу, поскольку это обратные друг другу процессы. В новом примере я ее переписал.
Код
set rotation.m11 = X.x
set rotation.m12 = X.y
set rotation.m13 = X.z
set rotation.m21 = Y.x
set rotation.m22 = Y.y
set rotation.m23 = Y.z
set rotation.m31 = Z.x
set rotation.m32 = Z.y
set rotation.m33 = Z.z
Здесь идет неверное назначение параметров матрицы. Дело в том, что матрица записывается следующим образом (из readme библиотеки Math)
m11 m12 m13
m21 m22 m23
m31 m32 m33
При этом, оси записываются слева направо, столбиками, то есть , ось X здесь, это m11, m21 и m31. Следовательно верной записью будет
Код
set rotation.m11 = X.x
set rotation.m21 = X.y
set rotation.m31 = X.z
set rotation.m12 = Y.x
set rotation.m22 = Y.y
set rotation.m32 = Y.z
set rotation.m13 = Z.x
set rotation.m23 = Z.y
set rotation.m33 = Z.z
И самая ложная строка
set rotation = MATRIX3.New_0()
Это создаст нулевую матрицу, то есть матрицу, все значения которой - нули. Базовая же матрица поворота, это единичная матрица, то есть матрица, чья главная диагональ состоит из единиц, а все остальное - нули.
Но это просто заметки, в текущей версии этих участков кода больше нет.
Причина: причин было много, а я искал лишь одну
Самыми распространёнными оказались элементарные ошибки в коде, отсутствие параметров, параметры не того типа данных (привет динамическая типизация) или лишние параметры, из за чего происходили "рандомные рассинхроны при обрыве потока"
Огромное спасибо пользователю prog, что откликнулся и смог найти ошибки, а нашёл он их при помощи языкового сервера sumneko lua для VScode
в 1.26 так делал xgm.guru/p/wc3/163817
Ща mix убраны и архитектура wc переделана, но идея таже - внедриться в процесс варкрафта и найти оффсеты функций.
У морфов есть параметр - неприрываемый это особое состояние юнита, которое нужно чтобы юнит докастовал заклинание в любом случае (если что то метаморфоза это 2 каста скилла, в альтернативную форму и обратно и у обоих есть время каста)
Ну собственно нам нужен скилл на основе морфа демон хантера "Перевоплощение"", начальная и конечная форма - дамми герой, остальные параметры в 0, суем этот скилл в руну а руну вручаем нужному герою и тут же отдаем приказ качтовать что то....
Результат - герой будет кастовать скилл, игнорируя всех и вся, иконки скиллов будут активны, но хоть закликайся.
Выйти из этого состояния можно только одним способом - выполнить любой морф как следует до конка, подходит для этого 'Aave' - Avenger form (морф сфинкса)
SamuraiKing:
есть вариант попроще - изменить способность звездопада, чтобы звезды падали 1 раз, и за каждый нужный промежуток времени создавать дамми и приказывать кастовать
Камеру можно прикрепить к юниту-кастеру. Также можно настроить смещение камеры
local real angle = GetUnitFacing(unit)*bj_DEGTORAD //угол взгляда кастера - угол смещения
local real dist = 300//расстояние, на которое сместится камера.
call SetCameraTargetControllerNoZForPlayer(GetOwningPlayer(unit),unit, dist*Cos(angle), dist*Sin(angle), false)
Графика - Анимация: обратный ход броска и Графика - Анимация: точка броска - графическте составляющие, анима у юнитов проигрывается, и созданы для задержек. Для невидимого dummy-каста это и не нужно
если вам нужна пустышка, то таких есть есть несколько десятков. Но что вам нужно?
чтобы не останавливался перед кастом, и шел дальше выполнять очередь приказов. но такое исключаем, вам же мгновенная нужна. к сожалению, такие абилки, требуют задержек. у меня есть список, но надо проверить CastTime = 0 будет работать на таких?
Анихак лаунчер заточен под борьбу с картой лича, поэтому не дает запускать все карты с мемхаком, пока есть возможноть это обойти - моя карта яркий пример, а так инфы подробной в паблик никто не сливал чтобы ракап не сделал апгрейд защиты...
Все функции прелоада замена на рид/врайт мемхака, и в любом случае проверь права администратора для варкрафта, например JNGP точно запущен с правами админа и всё норм, права на запись есть, а если вар запускаешь с обычными, то у него не будет прав для записи, файл прелоада не создасться как и writestring и дальше всё поедет... MKDimon, Запусти от админа, отпишись
Ну тебе нужно чтобы был прямо таки бафф который можно рассеивать?
Для начала сделай способность, и баф на основе какой нибудь пустышки, подойдет ярость у некромантов, так же переодический триггер который раз в пол секунды проверяет всех юнитов в группе, есть ли у них бафф если юнит мертв или у него нет баффа, то у юнита удаляется способность на доп урон зданиям и сам унит удаляется из группы.
При касте твоим шаманов заклинания на цель, ты добавляешь цель заклинания в группу, которую и перебирает описанный выше триггер.
Надеюсь понятно?
Была у меня раньше кампания "Legacy of Darkness", только она и так была переведена полностью. Наследие Тьмы. Там ещё забавные титры с падающими овцами и Думгуардами были.
ручками каждый триггер, каждое нестандартное описание из РО (очень тяжелый)
Открыть карту w3x MPQ редактором, внутри будет много файлов, в 1 из них будет весь нестандартный текст, загнать содержимой фала в переводчик или перевести вручную, и засунуть обратно в карту, а карту в кампанию
В каких единицах вообще измеряется высота и ширина, судя по всему в попугаях а не пикселях
Не в пикселях. Здесь хорошо показана координатная система интерфейса. В твоем распоряжении координаты от [0, 0] до [0.8, 0.6]. Можно пытаться выходит за пределы этих значений, но отображаться фреймы тогда могут криво.
Исключением из этой системы координат являются стандартные фреймы выходящие за приделы показанного в статье квадрата - мультиборд, иконки героев, фрейм игрового мира, портрет юнита. В их случае упомянутые выше координаты будут соответствовать всему игровому окну, а не только указанному квадрату.
Один фрейм может наследовать параметры другого. В этом случае пишется слово INHERITS и следом имя наследуемого фрейма. При этом вложенные фреймы не наследуются. Чтобы наследовались вложенные фремы тоже, нужно между INHERITS и именем наследуемого фрейма вставить ключевое слово WITHCHILDREN. Drulia_san:
что такое UseActiveContext
Указывает потомку (вложенному фрейму) использовать контекст родителя (объемлющего фрейма). То бишь, id привязанный к экземпляру фрейма во время игры. Например у панели ресурсов (золото/дерево/еда) 24 контекста, на каждого игрока.
Привязывает левый-нижний угол фрейма MyFrame к левому-верхнему углу родительского фрейма, со смещением 0.001, 0.001.
SetAllPoints просто привязывает все точки крепления потомка ко всем точкам крепления родителя. Drulia_san:
с этим даже экспериментировать болезненно и проблемно
Не бесполезно и не проблемно. Каталог игры содержит файлы шаблонов
Только редачить положение стандартных, чтобы создавать свои элементы нужен либо клиент Renderedge либо у ребят приближенных к Личу (Караулов и Анрайз), по факту есть библиотека dll позволяющая отрисовывать фреймы. но её в живую так и не видел. Это глубокие дебри чтобы туда влазить.
Отключай триггер вначале или в конце
Или там есть такая ерунда как owner of ....Переменная типа твой герой. То есть относимая к игроку- владельцу этого героя
Ельнур,
У него три триггера - по одному для каждого игрока.
Если в каждом одна и та же область, что наиболее вероятно - то и происходит описанное в его проблеме.
Я и так и так делал, все равно все умирают((
Поэтому нужно отсеивать. Это сразу для всех, не нужно делать для каждого игрока.
там нужно триггерно добавить в начале, а после удалить триггерно. главная особенность в том, что в таверне в ро никаких юнитов в таверне не должно быть указано. Иначе не работает абилка продажа войск, такая механика
Они будут сами применять способности, но изучать их придется триггерно. Главное, чтобы стояло Игрок - Компьютер у этого игрока, т.к. игрока без контроллера придется только триггерно направлять.
Ты и не найдешь ее в этом акшене, ибо там только стандартные способности.
Можно заставить через кастом скрипт. На примере нестандартной способности, созданной из "Удар Грома":
call IssueImmediateOrderBJ(твой юнит, "thunderclap")
Если для способности-пустышки-друга-спеллмейкеров "Канал", то вместо thunderclap пиши ID, который ты задал Каналу в менеджере объектов. Причем ID там может быть любой, хоть sleep.
Зайди в редактор объектов -> способности -> файл -> экспортировать способности.
Ты сохранишь файл, в котором хранятся способности. Такой же файл есть и в карте.
Это много раз обсуждалось. Какой-то глюк редактора. Попробуй удалить способность, перезагрузиться и создать её заново.
У бота 4 вариант об этом, кстати.
Да ты повторяешься xgm.guru/p/wc3/226412/comments?postid=420138#comment27 Помню ведь, что недавно это уже обсуждали.
Для того чтобы не было косяков с таймингом, я отказался от "затемнение-ввод" и использую затемнение и ввод отдельно. Тогда дерганий не заметно.
Ближе к теме: единственное что можно сделать это посмотреть начинку ф-ии и выдрать оттуда то, что конкретно вам нужно. Тогда работать будет быстрее и более точно. Кроме того, нужно отказаться от wait'ов, т. к. они не точно определяют время.
Самое удивительное: если карта "открыта" - всё работает, чёрная маска создаётся. Если же "разведана" - нет...
Как мне удалось наконец-то выяснить:
Если выставлен флаг "карта открыта" - просто запрещаются туман войны и чёрная маска. И чтобы вернуть всё на место, нужно разрешить их, а потом создать модификатор чёрной маски.
Если выставлен флаг "карта разведана" - ничего не запрещается, но создается модификатор тумана войны на всю карту. И его просто не может перекрыть новый модификатор чёрной маски, который я создаю триггерно. Нужно как-то отловить этот первоначальный модификатор тумана войны - и удалить его. Обращение через "последний созданный модификатор" не помогает. Может быть, есть еще какие-то способы найти и удалить этот модификатор?
Это странно, может область нужно создать во всю карту и её в модификаторе видимости указать? Но сначала попробуй где-то в свойствах карты убрать галочку Скрытые области частично видимы.
Reach, каким образом делается перевоплощение в твоей карте?
Через способность, улучшение или триггерно заменой одного юнита на другой?
Мне кажется, должно сработать через Casting unit.
Я делал через способность.
Сначала нужно создать переменную типа Боевая единица.
Потом установить ей значение - тот юнит, который будет перевоплощаться.
Привязать камеру к юниту (то есть уже к переменной).
Когда юнит применяет способность, поменять значение переменной на Casting unit.
Прикрепить обратно камеру к переменной-юниту.
Обозначения на скрине: Unit [10] - это тот самый юнит
Способность Смена оружия - сделана на основе способности друида ночных эльфов с флагом "Непрерываемый" для того, чтобы можно было перевоплощаться обратно и не терять при этом предметы.
при создании предмета в какой-то точке на карте ты создаешь его с помощью координат
присвой переменной Point рандомную позицию на карте, после создавай там предмет и дамми\видимость\чупакабру
как только предмет взяли - удаляем дамми и точку из памяти
профит
еще раз - нет! дефольтные способности вы не отследите, только полностью триггерный аналог, баши и криты сделанные триггерно лежать вот тут
Простенько, на jass но для начала сойдет.
koloff:
Объявляются переменные в начале.
local lightning l
call AddLightningEx(codeName, true, GetLocationX(where1), GetLocationY(where1), GetLocationZ(where1), GetLocationX(where2), GetLocationY(where2), GetLocationZ(where2))
set l = bj_lastCreatedLightning
Она должна быть в корневой папке варкрафта, лично у меня так. Попробуй переместить если она отдельно. Или скачай заново, может какойнибудь файл пропал, всякое бывает, вирусы там и тд
Первое: тебе нужен сам файл загрузочного экрана (я его скину под комментом).
Второе: тебе нужна сама картинка. Желательно 1024х728. Необходимо разрезать её на четыре части. Лично я делил так:
Верхняя левая часть: 512х256 пикселей (переименуй в LoadingScreenTL.tga)
Верхняя правая часть соотетсна тож 512х256 пикселей (переисенуй в LoadingScreenTR.tga)
Нижняя левая часть 512х256 (ну или как там получится) - переименуй в LoadingScreenBL
Нижнюю правую часть отмерь так же и назови LoadingScreenBR
Далее надо импортировать LoadingScreen.mdx и все файлы загрузочного экрана (то есть части картинки) непосредсна в саму карту и указать путь. Разрезать картинку можно легко с помощью проги InfanView. Удачи!
vLAd333, с помощью сайта конвертировал в какой формат?
посмотрел карту
блин я же просил проверить пути к текстурам
мало того что везде war3mapImported которого быть не должно
так ещё и модель требует разрезать картинку на 4 части
короче читаем статьи про создание лоадскринов и импорт файлов в карту
» WarCraft 3 / Обводка у модели
» Администрация XGM / Редактирование старых ресурсов
» WarCraft 3 / Ошибка в способности
» WarCraft 3 / Поворот эффекта
» IrInA Host Bot / Патч
» WarCraft 3 / Новые нативки для мемхака.
» WarCraft 3 / Фреймы на МемХаке
» WarCraft 3 / Время каста
» WarCraft 3 / Не могу найти причину
» WarCraft 3 / Модель жителей
» WarCraft 3 / Не запускается карта с мемхаком
» WarCraft 3 / Способности, созданные на основе одной стандартной
» WarCraft 3 / Бафф на 1 секунду
» WarCraft 3 / Кампания
» WarCraft 3 / скорость дефолтный абилок
» WarCraft 3 / Кастомный интерфейс
» WarCraft 3 / Таверна героев
» WarCraft 3 / Нестандартные способности
» WarCraft 3 / скрытые модели 1.26
» WarCraft 3 / Чёрная маска
» WarCraft 3 / Привязка камеры
» Администрация XGM / мой профиль
» WarCraft 3 / не станит дамми
» WarCraft 3 / атака молнией
» WarCraft 3 / Не работает загрузочный экран